package co.edu.uniquindio.gui;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import co.edu.uniquindio.delegados.AutomovilDelegado;
import co.edu.uniquindio.delegados.BusquedaDelegado;
import co.edu.uniquindio.delegados.Login;
import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Motor;
import co.edu.uniquindio.logica.Vendedor;
import datechooser.beans.DateChooserCombo;
/**
 * esta clase representa una ventana para un Automovil y usa el patron de diseño Singleton para la creacion de esta
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
public class VentanaAuto extends JFrame implements  ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField campoPlaca;
	private JTextField campoKilometraje;
    public static VentanaAuto me;
    private BusquedaDelegado busqueda=BusquedaDelegado.getBusquedaDelegado();
    private DateChooserCombo combo;
    private Login login= Login.getLogin();
	private JButton btnAceptar;
	private JComboBox comboBoxMotor;
	private JComboBox comboBoxColor;
	private JComboBox comboBoxModelo;
	private AutomovilDelegado automovil = AutomovilDelegado.getAutomovilDelegado();
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VentanaAuto frame = new VentanaAuto();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaAuto() 
	{
		initGUI();
	}
	/**
	 * este metodo em permite crear instancia unica de la clase VentanaAuto 
	 * @return
	 */
	public static VentanaAuto getVentanaAuto()
    {
		if (me == null)
			me = new VentanaAuto();
		return me;	
    }
	/**
	 * este metodo inicializa los componentes de la clase
	 */
	public void initGUI()
	{
		setTitle("Automoviles");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 509, 344);
		contentPane = new JPanel();
		contentPane.setBackground(Color.BLACK);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblPorFavorIngrese = new JLabel("por favor ingrese los datos del nuevo automovil :");
		lblPorFavorIngrese.setForeground(Color.WHITE);
		lblPorFavorIngrese.setBounds(12, 12, 418, 25);
		contentPane.add(lblPorFavorIngrese);
		
		JLabel lblNumeroPlaca = new JLabel("Numero Placa : ");
		lblNumeroPlaca.setForeground(Color.WHITE);
		lblNumeroPlaca.setBounds(12, 49, 117, 25);
		contentPane.add(lblNumeroPlaca);
		
		JLabel lblColor = new JLabel("Color : ");
		lblColor.setForeground(Color.WHITE);
		lblColor.setBounds(12, 76, 117, 25);
		contentPane.add(lblColor);
		
		JLabel lblModelo = new JLabel("Modelo : ");
		lblModelo.setForeground(Color.WHITE);
		lblModelo.setBounds(12, 103, 76, 25);
		contentPane.add(lblModelo);
		
		JLabel lblFechaCompra = new JLabel("Fecha Compra : ");
		lblFechaCompra.setForeground(Color.WHITE);
		lblFechaCompra.setBounds(12, 143, 117, 25);
		contentPane.add(lblFechaCompra);
		
		JLabel lblKilometraje = new JLabel("Kilometraje : ");
		lblKilometraje.setForeground(Color.WHITE);
		lblKilometraje.setBounds(12, 183, 117, 25);
		contentPane.add(lblKilometraje);
		
		JLabel lblMotor = new JLabel("Motor : ");
		lblMotor.setForeground(Color.WHITE);
		lblMotor.setBounds(12, 227, 88, 25);
		contentPane.add(lblMotor);
		
		campoPlaca = new JTextField();
		campoPlaca.setBounds(132, 49, 117, 25);
		contentPane.add(campoPlaca);
		campoPlaca.setColumns(10);
		
		campoKilometraje = new JTextField();
		campoKilometraje.setColumns(10);
		campoKilometraje.setBounds(132, 183, 117, 26);
		contentPane.add(campoKilometraje);
		
		comboBoxMotor = new JComboBox(inicializarMotores());
		comboBoxMotor.setBounds(132, 226, 117, 25);
		contentPane.add(comboBoxMotor);
		
		comboBoxColor = new JComboBox(inicializarColores());
		comboBoxColor.setBounds(132, 76, 117, 25);
		contentPane.add(comboBoxColor);
		
		comboBoxModelo = new JComboBox(inicializarModelos());
		comboBoxModelo.setBounds(132, 103, 117, 25);
		contentPane.add(comboBoxModelo);
		
		btnAceptar = new JButton("Aceptar");
		btnAceptar.setToolTipText("click para guardar el automovil");
		btnAceptar.setBounds(132, 269, 100, 26);
		btnAceptar.addActionListener(this);
		contentPane.add(btnAceptar);
		
		combo= new DateChooserCombo();
		combo.setBounds(135, 145, 114, 26);
		contentPane.add(combo);

	}
	
	public co.edu.uniquindio.logica.Color[]  inicializarColores()
	{
		List<co.edu.uniquindio.logica.Color> lista=busqueda.obtenerColores();
		co.edu.uniquindio.logica.Color[] lista2= new co.edu.uniquindio.logica.Color[lista.size()];
		for (int i = 0; i < lista.size(); i++) {
			lista2[i]=lista.get(i);
		}
		return	lista2 ;
	}
	
	public Motor[]  inicializarMotores()
	{
		List<Motor> lista=busqueda.obtenerMotores();
		Motor[] lista2= new Motor[lista.size()];
		for (int i = 0; i < lista.size(); i++) {
			lista2[i]=lista.get(i);
		}
		return	lista2 ;
	}
	public Modelo[]  inicializarModelos()
	{
		List<Modelo> lista=busqueda.obtenerModelos();
		Modelo[] lista2= new Modelo[lista.size()];
		for (int i = 0; i < lista.size(); i++) {
			lista2[i]=lista.get(i);
		}
		return	lista2 ;
	}
	/**
	 * este metodo me permite manejar y/o controlan los eventos que generan los componentes de la clase 
	 */
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getSource()==btnAceptar)
		{
			Calendar calendario=combo.getSelectedDate();
			Date fecha= calendario.getTime();
			String kilometraje=campoKilometraje.getText();
			String placa=campoPlaca.getText();
			Motor motor=(Motor)comboBoxMotor.getSelectedItem(); 
			Modelo modelo=(Modelo)comboBoxModelo.getSelectedItem();
			Vendedor vendedor= (Vendedor)login.getPersona();
			co.edu.uniquindio.logica.Color color =(co.edu.uniquindio.logica.Color)comboBoxColor.getSelectedItem();
			if(placa.equals("")&&kilometraje.equals(""))
			{
				Automovil auto= new Automovil(placa, color, modelo, vendedor, fecha, kilometraje, motor);
				try {
					automovil.registrarAutomovil(auto);
					campoPlaca.setText("");
					campoKilometraje.setText("");
				} catch (Exception e) {
					// TODO Auto-generated catch block
					JOptionPane.showMessageDialog(this, e.getMessage());
				}
			}
		}
	}
}
